package InterfaceGraphique;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;

import Principal.Graphe;
import Principal.Page;
import Principal.Utilisateur;

/**
 * Classe codant la fenetre d'ajout d'un admin à une Page
 * @author bruno
 *
 */
public class FenetreAjoutAdmin extends Fenetre {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Bouton qu'il faudra cliquer pour ajouter l'admin
	 * @see JButton
	 */
	public JButton button1 = new JButton("Ajouter l'admin");
	
	/**
	 * Bouton qu'il faudra cliquer pour annuler l'ajout et revenir au Menu
	 * @see JButton
	 */
	public JButton button2 = new JButton("Annuler");
	
	/**
	 * Liste déroulante dans laquelle on selectionnera la personne qu'on veut mettre admin
	 * @see JComboBox
	 */
	JComboBox<String> name = new JComboBox<String>(Test.g.getTabUtilisateur());
	
	/**
	 * Liste déroulante dans laquelle on selectionnera la page
	 * @see JComboBox
	 */
	JComboBox<String> name2 = new JComboBox<String>(Test.g.getTabPage());
	
	/**
	 * Constructeur de la fenetre
	 */
	public FenetreAjoutAdmin(){
		Test.disable(); // on rend inactif la fenetre du Menu pour éviter que l'utilisateur créer d'autre fenetre indéfiniment
		
		//Propriété de notre fenetre (titre,taille,possibilité de redimensionnement, etc...);
		this.setTitle("Ajouter un arc");
		this.setSize(550, 200);
		this.setResizable(true);
		this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		this.setVisible(true);
		this.setLocationRelativeTo(null);
		
		//permet de savoir quand les boutons sont cliqués
		button1.addActionListener(this);
		button2.addActionListener(this);
		
		//conteneur principal qu'on ajoutera a la fenetre
		JPanel main_container = new JPanel();
		//Type de Layout (permet de disposer les objets comme on le souhaite)
		main_container.setLayout(new GridBagLayout());
		
		GridBagConstraints gbc = new GridBagConstraints();
		
		//on précise le placement du premier composant sur le container
		gbc.gridx = 0;
		gbc.gridy = 0;
		//on précise la taille des composants par rapport à la grille 
		gbc.gridheight = 1;
		gbc.gridwidth = 1;
		gbc.ipady = 10;
		gbc.anchor = GridBagConstraints.WEST;
		
		JLabel label_for_name = new JLabel("Saisir le nom de la personne qui va être administrateur :");
		name.setPreferredSize(new Dimension(100, 25));
		main_container.add(label_for_name, gbc);
		gbc.gridx = 1;
		main_container.add(name, gbc);

		gbc.gridx = 0;
		gbc.gridy = 1;
		
		JLabel label_for_name2 = new JLabel("Saisir le nom de la page :");
		name2.setPreferredSize(new Dimension(100, 25));
		main_container.add(label_for_name2, gbc);
		gbc.gridx = 1;
		main_container.add(name2, gbc);
		
		gbc.gridx = 0;
		gbc.gridy = 2;
		
		//ajout des boutons
		main_container.add(button1, gbc);
		gbc.gridx = 1;
		main_container.add(button2, gbc);
		
		this.setContentPane(main_container);
	}
	
	/**
	 * Méthode qui définit ce que le programme fera en fonction des boutons cliqués
	 * @param e l'action dont on peut récupérer la source vie e.getSource()
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button1){
			boolean isGoodToSend = true;
			
			String field_one = (String) name.getSelectedItem();
			String field_two = (String) name2.getSelectedItem();
			
			// on vérifie que les noms soient pas vide
			if(field_one.equals("") || field_two.equals("")) isGoodToSend = false;
			
			if(isGoodToSend){ //si pas d'erreur
				Page tmp = (Page) Graphe.trouverSommet(Test.g.getListSommet(), field_two);
				if(tmp.ajouterAdmin((Utilisateur) Graphe.trouverSommet(Test.g.getListSommet(), field_one)))
				Test.f.load.setText("Admin ajouté !!!");
				else 
					Test.f.load.setText("Erreur lors de l'ajout de l'admin !!!");
			}
			else Test.f.load.setText("Erreur lors de l'ajout de l'admin !!!");
			
			//fermeture de la fenetre et réactivation du menu
			Test.reEnable();
			this.dispose();
		}
		if(e.getSource() == button2){
			Test.reEnable();
			this.dispose();
		}
	}
}	
